package br.unipar.blog.persistence.manager.usuario.impl;

import static com.google.code.liquidform.LiquidForm.alias;
import static com.google.code.liquidform.LiquidForm.eq;
import static com.google.code.liquidform.LiquidForm.select;
import br.unipar.blog.persistence.entity.Usuario;
import br.unipar.blog.persistence.manager.usuario.UsuarioManager;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.util.Assert;

public class JpaUsuarioManagerImpl implements UsuarioManager {

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public Usuario salvar(Usuario usuario) {
        Assert.notNull(usuario);
        Assert.isNull(usuario.getId());
        Assert.hasText(usuario.getEmail());
        Assert.hasText(usuario.getSenha());

        String senha = DigestUtils.md5Hex(usuario.getSenha());
        usuario.setSenha(senha);

        entityManager.persist(usuario);

        return usuario;
    }

	@Override
	public Usuario buscar(String email) {
		Assert.notNull(email);
		
		Usuario u = alias(Usuario.class, "u");
		String qlString = select(u).from(Usuario.class).as(u).where(eq(u.getEmail(), email)).toString();
		
		try {
			return (Usuario) entityManager.createQuery(qlString).getSingleResult();
		} catch(NoResultException e) {
			return null;
		}
	}

}
